﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Fuyao.Business.Entities.Models;
using Fuyao.Business.Logic.BC;
using Fuyao.Win.UI.Util;
using Fuyao.Win.UI.Common;


namespace Fuyao.Win.UI.Seguridad
{
    public partial class frmListUsuarios : Form
    {
        BusinessLogic bc = new BusinessLogic();
        List<Usuario> listUsuario = new List<Usuario>();

        public frmListUsuarios()
        {
            InitializeComponent();
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            this.ControlBox = false;
            this.WindowState = FormWindowState.Maximized;
            this.BringToFront();                
        }

        private void cargarGrillaUsuarios(bool _flag)
        {                  
            listUsuario = bc.getUsersByFilter(this.txtNombreUser.Text.Trim() == string.Empty ? "0" : this.txtNombreUser.Text.Trim(), this.txtApellidosUser.Text.Trim() == string.Empty ? "0" : this.txtApellidosUser.Text.Trim(), this.cboEstado.SelectedIndex == 0 ? true : false);
            if (listUsuario.Count > 0) dgvUsuarios.DataSource = listUsuario;
            else
            {
                if (!_flag)
                {
                    MessageBox.Show("No se encontraron registros, verifique los filtros de búsqueda", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    dgvUsuarios.DataSource = null;
                }
            }
        }

        private void setColumnasGrilla()
        {
            ColUsuarioID.DataPropertyName = "UsuarioID";
            colNombreUsuario.DataPropertyName = "Nombre";
            colApePatUsuario.DataPropertyName = "ApellidoPaterno";
            colApeMatUsuario.DataPropertyName = "ApellidoMaterno";
            colTelefonoUsuario.DataPropertyName = "Telefono";
            colLoginUsuario.DataPropertyName = "UserName";
            ColPasswordUsuario.DataPropertyName = "Password";
            colFecCreacionUsuario.DataPropertyName = "FechaCreacion";
            ColEstadoUsuario.DataPropertyName = "Estado";
            ColPerfilIdUsuario.DataPropertyName = "PerfilID";
            colDescPerfil.DataPropertyName = "DescripcionPerfil";
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            if (dgvUsuarios.RowCount == 0)
            {
                MessageBox.Show("No existen registros para Editar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (dgvUsuarios.CurrentRow != null && dgvUsuarios.CurrentRow.DataBoundItem != null) //instanciarFrmUsuario("EDITAR USUARIO", false, ((Usuario)dgvUsuarios.CurrentRow.DataBoundItem)); //Editar
            {
                Usuario oUsuario = (Usuario)dgvUsuarios.CurrentRow.DataBoundItem;
                Seguridad.frmUsuario frm = new Seguridad.frmUsuario();
                frm.UsuarioID = oUsuario.UsuarioID;
                frm.ShowDialog();
                if (frm.action) cargarGrillaUsuarios(false);
            }
            else
            {
                MessageBox.Show("Seleccione un registro para Editar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }            
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dgvUsuarios.RowCount == 0)
            {
                MessageBox.Show("No existen registros para Eliminar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            if (dgvUsuarios.CurrentRow != null) eliminarUsuario();
            else
            {
                MessageBox.Show("Seleccione un registro para Eliminar", "Sistema FUYAO - Validando Opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }     
        }

        private void eliminarUsuario()
        {
            if (!((Usuario)dgvUsuarios.CurrentRow.DataBoundItem).Estado)
            {
                MessageBox.Show("El registro seleccionado ya se encuentra eliminado", "Sistema FUYAO - Validando opción", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }                
            
            if (MessageBox.Show("Esta seguro que desea eliminar el registro seleccionado", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.YesNo,
                    MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                if (bc.DeleteUser(((Usuario)dgvUsuarios.CurrentRow.DataBoundItem).UsuarioID,VariablesGlobales.GlobalEnUsuario.UsuarioID))
                {
                    MessageBox.Show("Se eliminó el registro correctamente", "Sistema FUYAO - Mensaje de Confirmación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    cargarGrillaUsuarios(false);
                }
                else
                    MessageBox.Show("Error al eliminar el registro seleccionado, contacte con Sistemas", "Sistema FUYAO - Mensaje de Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);      
            }          
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            Seguridad.frmUsuario frm = new Seguridad.frmUsuario();
            frm.ShowDialog();
            if (frm.action) cargarGrillaUsuarios(false);
        }      

        private void limpiarControles()
        {            
            Utilitarios.limpiarControles(this);
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnMaximizar_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }

        private void btnRestaurar_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Normal;
        }

        private void frmListUsuarios_Load(object sender, EventArgs e)
        {
            this.cboEstado.SelectedIndex = 0;
            Utilitarios.configurarGrilla(ref dgvUsuarios);
            setColumnasGrilla();        
            cargarGrillaUsuarios(true);
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            cargarGrillaUsuarios(false);    
        }

        private void txtNombreUser_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter)) this.txtApellidosUser.Focus();
        }

        private void txtApellidosUser_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == Convert.ToChar(Keys.Enter)) this.btnBuscar.Focus();
        }
    }
}
